from typing import List
import frappe
from frappe.model.document import Document

# from lczz import config
from lczz.utils import 流程
from lczz.utils import a


# import lczz.utils.流程
class lczz(Document):
    def __init__(self, *args, **kwargs):
        self.自动前进一步 = True
        super().__init__(*args, **kwargs)

    def before_insert(self):
        print(f"before_insert ing👇")
        # 新增追踪单的时候，不自动前进
        # self.自动前进一步 = False
        return

    @frappe.whitelist()
    def 获取当前流程序号(self):
        print("测试成功")
        当前流程序号 = 流程.获取当前流程序号(self)
        return f"当前流程序号:{当前流程序号}"

    @frappe.whitelist()
    def 获取状态信息(self):
        # print('测试成功')
        当前状态序号 = 流程.获取当前流程序号(self)
        状态列表 = 流程.获取选项列表()
        res = {"当前状态序号": 当前状态序号, "状态列表": 状态列表}
        return res

    @property
    def 状态列表(self) -> List:
        状态列表 = 流程.获取选项列表()
        return 状态列表

    def before_save(self):
        print(f"before_save ing👇")
        print(f"frappe.session.自动创建lczzing 👉 {frappe.session.自动创建lczzing}")
        if frappe.session.自动创建lczzing:
            return
        # print(f"before_save执行了 self.自动前进一步:{self.自动前进一步}")
        # return
        # frappe.msgprint(f'{self.首款水单}')
        当前流程序号 = 流程.获取当前流程序号(self)
        # self.自动前进一步 = True
        match 当前流程序号:
            case 0:
                if not self.首款水单:
                    # frappe.throw("请上传首款水单！")
                    print(f"当前流程序号 👉 {当前流程序号}")
                    msg = "请上传首款水单！"
                    frappe.msgprint(msg, "流程追踪单消息")
                    return
                # self.save()
                print(f"提前save完成 ing👇")
                # self.前进一步()
            case 1:
                print(f"当前流程序号 👉 {当前流程序号}")
            case 2:
                print("待首款入账 让前端自己前进一步")
            case 3:
                print("Value is 3")
            case _:
                print("Value is something else")

    def after_insert(self):
        print(f"after_insert 执行了")
        frappe.msgprint(self.流程提醒, "流程追踪单消息", indicator="orange")
        return

    @frappe.whitelist()
    def 前进一步(self):
        print(f"前进一步 ing👇")
        当前状态 = 流程.流程进一步(self)
        print(f"前进完成 ing👇")
        match 当前状态:
            case "待首款入账":
                self.当前负责角色 = "Accounts User"
            case "待分派库存", "待物料需求", "待采购入库":
                self.当前负责角色 = "Stock User"
            case "待采购下单":
                self.当前负责角色 = "Purchase User"
            case _:
                print(f"当前状态 👉 {当前状态}")

        self.save()
        print(f"save 完成 ing👇")
        # link = f"/app/lczz/{self.name}"
        # msg = f" {当前状态} 完成! 下一步工作:{新状态}……点击 <a href='{link}'>流程追踪单:{self.name}</a> 查看 "
        frappe.msgprint(self.流程提醒, "流程追踪单消息", indicator="orange")
        return self.流程提醒

    @property
    def 流程提醒(self):
        序号 = 流程.获取当前流程序号(self)
        序号 -= 1
        列表 = 流程.获取选项列表()
        上一步 = 列表[序号]
        上一步 = frappe.bold(上一步)
        下一步 = frappe.bold(self.状态)
        name = f"<a href='/app/lczz/{self.name}'>{frappe.bold(self.name)}</a>"
        # name = frappe.bold(self.name)

        当前用户 = a.当前用户()
        当前用户 = frappe.bold(当前用户)
        kanban = f"<a href='/app/lczz/view/kanban/默认'>看板↗</a>"
        msg = f" {当前用户} 完成了{name} {上一步} ! "
        if 序号 < 0:
            msg = f" {当前用户} 创建了 流程追踪单:{name} ! "
        msg += f" 下一步工作:{下一步}……{kanban}"
        return msg
